package futbol.tacticas.concursantes2007.SeteTeam.jugadores.facklab;

import futbol.tacticas.concursantes2007.SeteTeam.jugadores.AbstractTacticaJugador;

import java.awt.Point;
import java.util.Vector;

import futbol.tacticas.Comando;


/**
 * Este es un tio mas flojo que el delantero alto, sin embargo tiene 
 * mucha mas velocidad, su objetivo es el de "hacer juego" junto con
 * los centrales medios (juagadores de sus mismas caracteristicas) y 
 * conseguir o chutar a puerta o pasarsela al delantero alto. 
 * 
 * 
 * @author Sete
 *
 */
public class TacticaDelanteroBajo  extends AbstractTacticaJugador{
	
	public TacticaDelanteroBajo(int xInicial, int yInicial, int fuerza, final Entrenador entrenador) {
		super(Entrenador.DEL_BAJO, xInicial, yInicial, fuerza, entrenador);
	}
	

	
	protected Point EvaluacionLinealVertical(Point A, Point B, int D) {
		Point Solucion = B;
		Point Auxiliar;
		
		for (int i=-D;i<=D;i++){
			Auxiliar = new Point((int)B.getX(),i);
			if (Densidad_Jugadores(Solucion, A)>Densidad_Jugadores(Auxiliar, A)){
				Solucion = Auxiliar;
			}
		}		
		return Solucion;
	}

	
	protected void generarMovimientoOfensivo(final Vector<Comando> comandos){

		final Point bola = getSituacion().getBola();
		final Point A = new Point(100,0);
		final Point B = new Point(160,80);
		
		if (bola.getX()>A.x && bola.getX()<B.x && bola.getY()>A.y && bola.getY()<B.y ){
			comandos.add(irA(bola.x, bola.y));
		}else{
			Point P = heuristicaMovimiento(A,B);
			comandos.add(irA(P.x,P.y));
		}		
	}
	
	protected void generarMovimientoDefensivo(final Vector<Comando> comandos){
		int   D = 100; // Desplazamiento
		Point P = new Point(50,0); // Punto central
		Point A = getSituacion().getBola();
	
		Point O = EvaluacionLinealVertical(A,P,D);
		comandos.add(irA(O.getX(), O.getY()));
	}

	protected void generarMovimiento(final Vector<Comando> comandos) {
		if (getPosicion().distance(getSituacion().getBola())<40){
			Point O = getSituacion().getBola();
			comandos.add(irA(O.x, O.y));
		}else{
			if (getSituacion().getBola().getX()>0){
				generarMovimientoOfensivo(comandos);
			}else{
				generarMovimientoDefensivo(comandos);
			}
		}
	}
	
	protected void generarAccion(final Vector<Comando> comandos) {
		if (getSituacion().getBola().getX()>0){
			comandos.add(this.tiroAPuertaPreciso());
		}else{
			comandos.add(this.tiroAPuertaPreciso());
		}
	}

}
 